#include <stdlib.h>

#define N 10
int ** matriz;

int count_neighbors(int i, int j){
    int contador=0;
    //vecino arriba
    if (j>0){
        if(matriz[i][j-1]==1)
          contador++;
        //arriba izquierda
        if (i>0){
           if(matriz[i-1][j-1]==1)
              contador++;
        }
        //arriba derecha
        if (i<n-1){
           if(matriz[i+1][j-1]==1)
              contador++;
        }
    }
    if (j<n-1){
        //vecino abajo
        if(matriz[i][j+1]==1)
          contador++;
        //abajo izquierda
        if (i>0){
           if(matriz[i-1][j+1]==1)
              contador++;
        }
        //abajo derecha
        if (i<n-1){
           if(matriz[i+1][j+1]==1)
              contador++;
        }
    }
return contador;
}

void initialize(){ //inicializa las celdas
int i,j;
matriz = (int**)malloc(N*4);
for (i=0;i<N;i++){
    matriz[i] = (int*)malloc(N*4);
    for (j=0;j<N;j++)
        matriz[i][j] = round(rand());
    }
}

void print()
{
     int i,j;
     
     for(i=0; i<N; i++)
              for(i=0; i<N; i++)
                       if(matriz[i][j]==1)
                           fprintf(stdout,"*"); fflush(stdout);
                       else
                           fprintf(stdout,"-"); fflush(stdout); 
}

void iterate()
{
     int i,j,neigh;
     
     for(i=0; i<N; i++)
              for(i=0; i<N; i++) {
                       neigh = count_neighbors(i,j);
                       if(matriz[i][j]==1 && (neigh<2 || neigh>3))
                           matriz[i][j]=0;
                       else {
                           if(matriz[i][j]==0 && neigh==3)
                                 matriz[i][j]=1;
                       }
              }
}

void simulate_life(int count)
{
     int i;
     
     for(i=0; i<count; i++) {
              print();
              iterate();
     }
}


int main(){
    initialize();
    return 0;
}
